package com.xiaobange.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xiaobange.dto.ReservationListPage;
import com.xiaobange.entity.Reservation;
import com.xiaobange.vo.RequestPage;
import com.xiaobange.vo.ResultResponse;

import java.time.LocalDate;
import java.time.LocalTime;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
* @author banji
* @description 针对表【appointment(预约表)】的数据库操作Service
* @createDate 2025-04-24 17:57:21
*/
public interface ReservationService extends IService<Reservation> {

    /**
     * 添加预约挂号
     * @param reservation 挂号信息
     * @return 挂号结果
     */
    ResultResponse<String> addRegisteredOrder(Reservation reservation);

    /**
     * 修改预约状态
     * @param status 状态值
     * @param reservationId 取消订单ID
     * @return
     */
    ResultResponse<?> cancel(String status, String reservationId);

    /**
     * 用户更新预约信息
     * @param reservation 更新数据
     * @return 更新结果
     */
    ResultResponse<?> modify(Reservation reservation);

    /**
     * 查询预约数据
     * @param clientId 查询预约用户ID
     * @param status 预约状态
     * @return 查询结果
     */
    ResultResponse<List<Reservation>> queryStatus(String clientId, String status);

    /**
     * 查询指定医生指定日期的可用时间
     * @param localDate 指定日期
     * @param doctorId 指定医生
     * @return 可用时间
     */
    ResultResponse<List<LocalTime>> availableTime(LocalDate localDate, String doctorId);


    /**
     * 分页查询预约记录
     * @param reservationListPage
     * @return
     */
    RequestPage<Reservation> reservationPage(ReservationListPage reservationListPage);


    /**
     * 指定医生指定时间段
     * @param appointmentTime 预约日期
     * @return 结果
     */
    ResultResponse<?> specifyDoctor(LocalDate appointmentTime);
}
